// 用户相关数据维护和管理模块（token，登录人信息
import { setToken, getToken, removeToken } from '@/utils/auth'
import { login, getUserInfo, getUserDetailById } from '@/api/user.js'
export default {
  // 开启命名空间
  namespaced: true,
  // 存和定义用户数据
  state: {
    // 登录之后的token数据
    token: getToken() || '',
    // 登录人信息
    userInfo: {}
  },
  // getters: {
  //   value: state => {
  //     return state.value
  //   }
  // },
  // 修改state中的数据（同步）
  mutations: {
    // 存token的方法 拿到state所有数据，payload外边传递的参数
    updateToken (state, payload) {
      state.token = payload
      // 本地存储
      setToken(payload)
    },
    // 删除token的方法
    delToken (state) {
      state.token = ''
      removeToken()
    },
    // 存储用户信息
    updateUserInfo (state, userInfo) {
      state.userInfo = userInfo
    },
    // 删除用户信息
    delUserInfo (state) {
      state.userInfo = {}
    }
  },
  // 获取后台数据（异步）
  actions: {
    async loginAction ({ commit }, payload) {
      const token = await login(payload)
      commit('updateToken', token)
    },
    // 获取登录人数据并存储
    async userInfoAction (ctx) {
      // 用户基本信息
      const userInfo = await getUserInfo()
      // 获取用户头像
      const avator = await getUserDetailById(userInfo.userId)
      // console.log(userInfo, avator)
      ctx.commit('updateUserInfo', { ...userInfo, ...avator })
    },
    // 退出登录,清除本地的状态数据
    logoutAction ({ commit }) {
      // 如果有退出接口，调用
      // 清除本地登录存储的数据 token userInfo
      commit('delToken')
      commit('delUserInfo')
    }
  }
}
